package cn.tedu.baking.aop;

import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/**
 * 前置通知 (@Before)：在切入点方法执行之前执行
 * 后置通知 (@After)：在切入点方法执行之后执行，无论切入点方法内部是否出现异常，后置通知都会执行。
 * 环绕通知 (@Around)：手动调用切入点方法并对其进行增强的通知方式。
 * 返回后通知 (@AfterReturning)：在切入点方法执行之后执行，如果切入点方法内部出现异常将不会执行。
 * 抛出异常后通知 (@AfterThrowing)：在切入点方法执行之后执行，只有当切入点方法内部出现异常之后才执行。
 */
@Aspect
@Component
public class SysNoticeAspect {
    @Pointcut("bean(testController)") //以testController类当做切入点,则可以通知到类中的所有方法
    private void timePointCut(){} //普通的方法

    @Before("timePointCut()")//指定通知的切入点
    public void doBefore(){
        System.out.println("@Before : 前置通知执行了");
    }
    @After("timePointCut()")//指定通知的切入点
    public void doAfter(){
        System.out.println("@After : 后置通知执行了,指的是wan3方法无论是正常/异常执行后执行.");
    }

    @AfterReturning("timePointCut()")//指定通知的切入点
    public void doAfterReturning(){
        System.out.println("@AfterReturning : 返回后通知执行了,指的是wan3方法正常结束以后执行.");
    }
    @AfterThrowing("timePointCut()")//指定通知的切入点
    public void doAfterThrowing(){
        System.out.println("@AfterThrowing : 抛出异常后通知执行了,指的是wan3方法异常以后执行.");
    }

}
